home *** CD-ROM | disk | FTP | other *** search
- unit main;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Menus, StdCtrls, Buttons;
-
- const
- cPLUGIN_MASK = '*.plg';
-
- type
- TfrmMain = class(TForm)
- mnuMain: TMainMenu;
- File1: TMenuItem;
- Exit1: TMenuItem;
- GroupBox1: TGroupBox;
- memPlugins: TMemo;
- BitBtn1: TBitBtn;
- Plugin1: TMenuItem;
- procedure Exit1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- procedure LoadPlugins;
- procedure LoadPlugin(sr: TSearchRec);
- public
- { Public declarations }
- end;
-
- var
- frmMain: TfrmMain;
-
- implementation
-
- uses Common;
-
- {$R *.DFM}
-
- procedure TfrmMain.Exit1Click(Sender: TObject);
- begin
- frmMain.Close;
- end;
-
- {Iterate the application directory looking for plugin files}
- procedure TfrmMain.LoadPlugins;
- var sr: TSearchRec;
- path: string;
- Found: integer;
- begin
- path := ExtractFilePath(Application.Exename);
- try
- //Found := FindFirst(path+cPLUGIN_MASK, faAnyFile, sr);
- Found := FindFirst(path+cPLUGIN_MASK, 0, sr);
- while Found = 0 do
- begin
- LoadPlugin(sr);
- Found := FindNext(sr);
- end;
- finally
- FindClose(sr);
- end;
- end;
-
- {Load the specified plugin DLL}
- procedure TfrmMain.LoadPlugin(sr: TSearchRec);
- var Description: String;
- LibHandle: integer;
- DescribeProc: TPluginDescribe;
- InitProc: TPluginInit;
- begin
- LibHandle := LoadLibrary(Pchar(sr.Name));
- if LibHandle <> 0 then
- begin
- // Find DescribePlugin
- DescribeProc := GetProcAddress(LibHandle, cPLUGIN_DESCRIBE);
- if assigned(DescribeProc) then
- begin
- // Call DescribePlugin
- DescribeProc(Description);
- memPlugins.Lines.Add(Description);
- // Find InitPlugin
- InitProc := GetProcAddress(LibHandle, cPLUGIN_INIT);
- if assigned(InitProc) then
- begin
- //Call InitPlugin
- InitProc(mnuMain);
- end;
- end
- else
- begin
- Messagedlg('File "'+sr.Name+'" is not a valid plugin.',
- mtInformation, [mbOK], 0);
- end;
- end
- else
- begin
- Messagedlg('An error occurred loading the plugin "'+sr.Name+'".',
- mtInformation, [mbOK], 0);
- end;
- end;
-
-
- procedure TfrmMain.FormCreate(Sender: TObject);
- begin
- LoadPlugins;
- end;
-
- end.
-